package org.mysofts.eclipseman.exceptions;

import java.io.File;
import java.text.MessageFormat;

import org.mysofts.eclipseman.archives.Archive;

/**
 * Exception qui est levée lors d'une erreur d'instanciation d'un objet
 * {@link Archive} par {@link org.mysofts.eclipseman.archives.ArchiveFactory}.
 * 
 * @author reda
 * 
 */
public final class InstanciateArchiveException extends Exception {
	/**
	 * Pattern du message d'exception.
	 */
	private static final String MESSAGE_PATTERN = "Erreur d''une instanciation d''un "
			+ "objet archive de type ''{0}'' " + "pour le fichier ''{1}''";
	/**
	 * Serial Id.
	 */
	private static final long serialVersionUID = -8909422349671943630L;
	/**
	 * Fichier archive.
	 */
	private final File file;
	/**
	 * Classe archive à instancier.
	 */
	private final Class<? extends Archive> clazz;

	/**
	 * Constructeur.
	 * 
	 * @param file
	 *            Fichier pour lequel on a tenté d'instancier une archive.
	 * @param clazz
	 *            Type de classe à instancier.
	 * @param exceptionToLog
	 *            Exception parente qui a causé le problème d'instanciation.
	 */
	public InstanciateArchiveException(final File file,
			final Class<? extends Archive> clazz, final Exception exceptionToLog) {
		super(MessageFormat.format(MESSAGE_PATTERN, clazz.getCanonicalName(),
				file.getAbsolutePath()), exceptionToLog);
		this.clazz = clazz;
		this.file = file;
	}

	/**
	 * @return the file
	 */
	public File getFile() {
		return this.file;
	}

	/**
	 * @return the clazz
	 */
	public Class<? extends Archive> getClassToInstanciate() {
		return this.clazz;
	}
	
	

}
